package com.LeeCode;

import java.util.HashMap;

/**
 * 长度为k子数组中的最大和
 */

public class Code2461 {
    public static void main(String[] args) {
        int[] nums = {1, 5, 4, 2, 9, 9, 9};
        int k = 3;
        System.out.println(new Code2461().maximumSubarraySum(nums, k));
    }

    public long maximumSubarraySum(int[] nums, int k) {
        long ans = 0, curSum = 0;
        HashMap<Integer, Integer> map = new HashMap<>();

        for (int i = 0; i < nums.length; i++) {
            curSum += nums[i];
            map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);

            if (i < k - 1) {
                continue;
            }

            if (map.size() == k && curSum > ans)
                ans = curSum;

            curSum -= nums[i - k + 1];
            map.put(nums[i - k + 1], map.get(nums[i - k + 1]) - 1);
            if (map.get(nums[i - k + 1]) == 0)
                map.remove(nums[i - k + 1]);
        }
        return ans;
    }
}
